from info.models import User

from flask import session,current_app,g

# 自定义装饰器，封装检查用户登录状态的代码
# 问题：封装代码后，在视图函数中使用装饰器，发现函数名变成了wrapper！
# 装饰器修改了被装饰的函数的属性__name__
import functools
def login_required(f):
    @functools.wraps(f)
    def wrapper(*args,**kwargs):
        user = None
        user_id = session.get("user_id")
        if user_id:
            try:
                user = User.query.get(user_id)
            except Exception as e:
                current_app.logger.error(e)
        # 使用应用上下文对象g，来临时存储用户数据，
        # 把查询结果的user对象，赋值给g的属性存储
        g.user = user
        return f(*args,**kwargs)
    # wrapper.__name__ = f.__name__
    return wrapper

